import cv2 as cv
from matplotlib import pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei' #中文显示
# 1 读取图像，并转换为灰度图
planets = cv.imread("../imgs/star.jpeg")
gay_img = cv.cvtColor(planets, cv.COLOR_BGRA2GRAY)
# 2 进行中值模糊，去噪点: 由于霍夫圆检测对噪声比较敏感，所以首先对图像进行中值滤波。
img = cv.medianBlur(gay_img, 7)
# 3 霍夫圆检测(图像,检测算法,霍夫空间分辨率,圆心间最小距离,)
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1
                          , 200, param1=100, param2=30, minRadius=0, maxRadius=100)
# 4 将检测结果绘制在图像上
for i in circles[0, :]:  # 遍历矩阵每一行的数据
    print(i[0],i[1],i[2])
    # 绘制圆形:绘制时，i[0]等有小数点，强制转成int类型才能显示！
    cv.circle(planets, (int(i[0]), int(i[1])), int(i[2]), (0, 255, 0), 2)
    # # 绘制圆心
    cv.circle(planets, (int(i[0]), int(i[1])), 2, (0, 0, 255), 3)
# 5 图像显示
plt.figure(figsize=(10,8),dpi=100)
plt.imshow(planets[:,:,::-1]),plt.title('霍夫变换圆检测')
plt.xticks([]), plt.yticks([])
plt.show()
